Indexes এবং Performance Optimization

Database Tutorials - ডাইনামোডিবি (DynamoDB)
261
261

DynamoDB একটি NoSQL ডেটাবেস সিস্টেম যা উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করার জন্য বিভিন্ন ইনডেক্সিং কৌশল ব্যবহার করে। ডেটার দ্রুত অ্যাক্সেস এবং কার্যকর Query অপারেশন নিশ্চিত করার জন্য Secondary Indexes ব্যবহার করা হয়। এই ইনডেক্সগুলির মাধ্যমে ডেটাকে বিভিন্ন পদ্ধতিতে সাজানো এবং অনুসন্ধান করা সম্ভব হয়, যা ডেটার জন্য পারফরম্যান্স অপটিমাইজ করতে সাহায্য করে।

এখানে Indexes এবং Performance Optimization সম্পর্কিত বিভিন্ন ধারণা ও কৌশল ব্যাখ্যা করা হয়েছে:


1. Secondary Indexes (GSI ও LSI)

Secondary Indexes হল এমন ইনডেক্স যা Primary Key (Partition Key + Sort Key) থেকে আলাদা। DynamoDB তে দুটি ধরনের সেকেন্ডারি ইনডেক্স রয়েছে:

A. Global Secondary Index (GSI):

  • Global Secondary Index (GSI) আপনাকে একটি Partition Key এবং Sort Key নির্বাচন করার অনুমতি দেয় যা Primary Key এর বাইরে।
  • GSI ব্যবহারের মাধ্যমে আপনি কোনও নির্দিষ্ট অ্যাট্রিবিউটের উপর ভিত্তি করে ডেটা দ্রুত অনুসন্ধান করতে পারেন।
  • GSI তে আপনি শুধুমাত্র নির্বাচিত অ্যাট্রিবিউটগুলি ইনডেক্স হিসেবে ব্যবহার করতে পারেন, যা পারফরম্যান্সে সহায়তা করে।

উদাহরণ:

  • ধরুন, আপনার একটি টেবিল রয়েছে যেখানে UserID এবং Timestamp সেগুলি Primary Key (Partition Key + Sort Key) হিসেবে ব্যবহার করা হচ্ছে।
  • এখন যদি আপনি Location অ্যাট্রিবিউটের উপর ভিত্তি করে ডেটা অনুসন্ধান করতে চান, তবে আপনি Location অ্যাট্রিবিউটকে GSI হিসেবে তৈরি করতে পারেন। এটি আপনাকে Location এর ভিত্তিতে দ্রুত Query করতে সাহায্য করবে।

B. Local Secondary Index (LSI):

  • Local Secondary Index (LSI) তে আপনি শুধুমাত্র Partition Key ব্যবহার করতে পারবেন, কিন্তু Sort Key পরিবর্তন করতে পারবেন। এর মাধ্যমে আপনি একাধিক Sort Key তৈরি করতে পারেন একটি একই Partition Key এর জন্য।
  • LSI তে ডেটা শুধুমাত্র একটিমাত্র পার্টিশনে (Partition Key এর ভিত্তিতে) থাকে, তবে সেগুলিকে বিভিন্ন Sort Key এর মাধ্যমে অর্ডার করা হয়।

উদাহরণ:

  • ধরুন, আপনার টেবিলের UserID হল Partition Key এবং Timestamp হল Sort Key।
  • আপনি যদি Timestamp এর সাথে আরও একটি Sort Key যেমন Price ব্যবহার করতে চান, তবে আপনি LSI তৈরি করতে পারেন যাতে UserID এর ভিত্তিতে Price অনুসারে ডেটা খুঁজে পাওয়া যায়।

2. Performance Optimization with Indexes

A. Query Performance:

  • GSI এবং LSI ব্যবহার করার মাধ্যমে আপনি নির্দিষ্ট Partition Key বা Sort Key এর ভিত্তিতে ডেটা অনুসন্ধান করতে পারবেন, যা Query অপারেশনকে আরও দ্রুত এবং দক্ষ করে তোলে।
  • Global Secondary Indexes ডেটাকে পৃথিবীজুড়ে (Global) অর্ডার করার সুযোগ দেয়, তবে LSI শুধুমাত্র নির্দিষ্ট পার্টিশনের মধ্যে কাজ করে, যা আরও সীমিত স্কোপে থাকে।

B. Reducing Scan Operations:

  • Scan অপারেশন সাধারনত পুরো টেবিলের ওপর কাজ করে, যা অনেক বেশি সময় নেয় এবং ডেটাবেসের পারফরম্যান্স কমিয়ে দেয়।
  • যখনই সম্ভব, Query অপারেশন ব্যবহার করুন যেহেতু এটি Index ব্যবহার করে এবং দ্রুত ডেটা ফিরিয়ে দেয়।

C. Denormalization:

  • NoSQL ডেটাবেসে সাধারণত Normalization এর তুলনায় Denormalization বেশি ব্যবহৃত হয়। মানে, একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন না করে, সব ডেটা একটিমাত্র টেবিলে রেখে ডেটা অ্যাক্সেসের জন্য বিভিন্ন ইনডেক্স ব্যবহার করা হয়।

D. Proper Indexing Strategy:

  • ডেটাবেসে প্রত্যেক Query অপারেশনের জন্য সঠিক ইনডেক্স পরিকল্পনা খুবই গুরুত্বপূর্ণ। আপনার Query গুলির ধরন এবং অনুসন্ধানের প্রক্রিয়া অনুযায়ী GSI বা LSI নির্বাচন করুন।
  • GSI ব্যবহার করার সময়, Projection Expression এর মাধ্যমে আপনি ইনডেক্সে থাকা অ্যাট্রিবিউট গুলি নির্বাচন করতে পারেন, যা ডেটার মাত্রা কমিয়ে Query পারফরম্যান্স বাড়ায়।

3. Capacity Units এবং Scaling

DynamoDB একটি Capacity Mode অফার করে যা আপনাকে Provisioned অথবা On-Demand মডে কাজ করার সুযোগ দেয়। আপনি যখন কোন টেবিল তৈরি করেন তখন আপনি তার Read/Write Capacity Units (RCU/WCU) কনফিগার করতে পারেন, যা টেবিলের পারফরম্যান্সে প্রভাব ফেলে।

Provisioned Mode:

  • আপনি নির্দিষ্ট সংখ্যক RCU (Read Capacity Units) এবং WCU (Write Capacity Units) কনফিগার করেন। যদি আপনার অ্যাপ্লিকেশন উচ্চ ট্রাফিক সাপোর্ট করতে সক্ষম হয়, তবে Provisioned Mode ব্যবহার করুন।
  • একাধিক ইনডেক্সের জন্য পর্যাপ্ত RCU/WCU কনফিগার করা প্রয়োজন, কারণ এগুলি Query এবং Scan এর জন্য অতিরিক্ত রিসোর্স ব্যবহার করতে পারে।

On-Demand Mode:

  • On-Demand মুডে, DynamoDB স্বয়ংক্রিয়ভাবে প্রয়োজনীয় RCU/WCU বৃদ্ধি বা কমায়, যেটি উচ্চ পারফরম্যান্স নিশ্চিত করে যখন ট্রাফিক অস্থির থাকে।

4. Partitioning এবং Data Distribution Techniques

DynamoDB একটি ডিস্ট্রিবিউটেড ডেটাবেস সিস্টেম, এবং ডেটা সঠিকভাবে পার্টিশন করা পারফরম্যান্স অপটিমাইজেশনের জন্য খুবই গুরুত্বপূর্ণ।

A. Proper Partition Key Selection:

  • Partition Key সঠিকভাবে নির্বাচন করুন, যাতে ডেটা evenly (সমানভাবে) বিভিন্ন পার্টিশনে বিতরণ হয়।
  • একাধিক hot partitions এ ডেটা জমে গেলে পারফরম্যান্স ব্যাপকভাবে কমে যেতে পারে।

B. Optimizing Write Patterns:

  • Hot partitioning এড়াতে চেষ্টা করুন, বিশেষ করে যখন আপনার কিছু Partition Key খুব বেশি রাইট করে। এমন Partition Key ব্যবহার করুন যা evenly distributed।

উপসংহার

DynamoDB তে Indexing এবং Performance Optimization অত্যন্ত গুরুত্বপূর্ণ। সঠিকভাবে Secondary Indexes (GSI/LSI) ব্যবহার করে এবং টেবিলের সঠিক Capacity Mode নির্বাচন করে আপনি অ্যাপ্লিকেশনের পারফরম্যান্স অনেকটাই উন্নত করতে পারেন। এছাড়াও, Partition Key নির্বাচন এবং রাইট/স্ক্যান অপারেশন অপটিমাইজেশন পারফরম্যান্সে বড় প্রভাব ফেলতে পারে।

common.content_added_by

Secondary Indexes (Global এবং Local Secondary Indexes)

272
272

Secondary Indexes DynamoDB-তে একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ডেটাবেসের বিভিন্ন ধরনের Query অপারেশন সহজতর করতে সাহায্য করে। DynamoDB মূলত দুটি ধরনের Secondary Index সমর্থন করে:

  1. Global Secondary Index (GSI)
  2. Local Secondary Index (LSI)

এগুলো মূল টেবিলের Primary Key এর বাইরে অন্যান্য অ্যাট্রিবিউটের উপর ভিত্তি করে ডেটাকে আরও কার্যকরীভাবে অনুসন্ধান এবং এক্সেস করার সুযোগ দেয়।


Global Secondary Index (GSI)

Global Secondary Index (GSI) একটি শক্তিশালী ফিচার, যা আপনাকে Partition Key এবং Sort Key এর বাইরে অন্য কোনও অ্যাট্রিবিউটের উপর ভিত্তি করে ডেটা অনুসন্ধান করতে দেয়। GSI সম্পূর্ণভাবে স্বাধীন এবং এর Partition Key এবং Sort Key মূল টেবিলের সঙ্গেও ভিন্ন হতে পারে। এটি আপনাকে Query এবং Scan অপারেশনগুলির জন্য আরও বেশি flexibility প্রদান করে।

বিশেষত্ব:

  • Partition Key এবং Sort Key এর কোন বাধ্যবাধকতা নেই; আপনি যে কোনও অ্যাট্রিবিউটকে Partition Key বা Sort Key হিসেবে ব্যবহার করতে পারেন।
  • GSI টেবিলের সাথে সম্পর্কিত নতুন অ্যাট্রিবিউটগুলো ইন্ডেক্সের অংশ হতে পারে।
  • GSI তৈরি এবং আপডেট করার সময় টেবিলের পারফরম্যান্সের উপর খুব বেশি প্রভাব পড়ে না কারণ এটি মূল টেবিল থেকে আলাদা হয়।
  • Provisioned বা On-Demand উভয় ধরনের ক্যাপাসিটি মডে ব্যবহার করা যায়।

GSI এর ব্যবহার উদাহরণ:

ধরা যাক, আপনি একটি Products টেবিল তৈরি করেছেন, যেখানে ProductID হল Partition Key এবং Category হল Sort Key:

  • যদি আপনি Price অ্যাট্রিবিউট দিয়ে ডেটা অনুসন্ধান করতে চান, তাহলে আপনি একটি Global Secondary Index তৈরি করতে পারেন যেখানে Price হবে Partition Key বা Sort Key

এতে করে আপনি Price অনুযায়ী খুব দ্রুত ডেটা রিড করতে পারবেন, যদিও Price মূল টেবিলের কোনো পার্টিশন বা সার্ট কী নয়।


Local Secondary Index (LSI)

Local Secondary Index (LSI) একটি অন্যরকম ধরনের ইন্ডেক্স, যা মূল টেবিলের Partition Key এর উপর ভিত্তি করে কাজ করে, কিন্তু Sort Key আলাদা করে দেয়। এর মাধ্যমে, আপনি মূল টেবিলের Partition Key (যেটি অপরিহার্য) এবং Sort Key এর একাধিক ভিন্ন ভিন্ন কন্ট্রোল তৈরি করতে পারেন।

বিশেষত্ব:

  • LSI শুধুমাত্র একই Partition Key এর মধ্যে বিভিন্ন Sort Key তৈরি করতে সাহায্য করে।
  • একাধিক Sort Key এর সাহায্যে বিভিন্ন ধরনের query অপারেশন করা যায়, যা মূল টেবিলের সাথে একসাথে ব্যবহার করা যেতে পারে।
  • LSI সর্বোচ্চ 5টি পর্যন্ত Secondary Index তৈরি করতে সক্ষম।
  • LSI ব্যবহার করার সময়, ইনডেক্সটি মূল টেবিলের ক্যাপাসিটির মধ্যে সীমাবদ্ধ থাকে, অর্থাৎ এটি একই Provisioned বা On-Demand ক্যাপাসিটি শেয়ার করে।

LSI এর ব্যবহার উদাহরণ:

ধরা যাক, আপনি একটি Users টেবিল তৈরি করেছেন যেখানে UserID হল Partition Key এবং DateOfBirth হল Sort Key:

  • আপনি যদি City এর ওপর ভিত্তি করে ডেটা অনুসন্ধান করতে চান, তাহলে একটি Local Secondary Index তৈরি করতে পারেন যেখানে City একটি নতুন Sort Key হবে।

এভাবে, আপনি একই UserID এর মধ্যে DateOfBirth বা City দিয়ে ডেটা অনুসন্ধান করতে পারবেন।


GSI এবং LSI এর মধ্যে পার্থক্য

বৈশিষ্ট্যGlobal Secondary Index (GSI)Local Secondary Index (LSI)
Partition Keyস্বাধীন, মূল টেবিলের Partition Key থেকে আলাদা হতে পারে।মূল টেবিলের Partition Key এর সাথে মেলে।
Sort Keyস্বাধীন, মূল টেবিলের Sort Key থেকে আলাদা হতে পারে।মূল টেবিলের Sort Key এর সাথে মেলে।
Maximum Number of Indexesসীমাহীন, একাধিক GSI তৈরি করা যেতে পারে।সর্বোচ্চ 5টি LSI তৈরি করা যেতে পারে।
Provisioned/On-DemandProvisioned এবং On-Demand উভয় ধরনের ক্যাপাসিটি ব্যবহার করা যেতে পারে।শুধুমাত্র Provisioned ক্যাপাসিটির অধীনে ব্যবহৃত হয়।
Performance ImpactGSI টেবিলের পারফরম্যান্সে খুব কম প্রভাব ফেলে।LSI মূল টেবিলের পারফরম্যান্সের সাথে সম্পর্কিত, তাই এটি বেশি প্রভাব ফেলতে পারে।
Data Retrieval Flexibilityঅনেক বেশি ফ্লেক্সিবিলিটি, কারণ আপনি যেকোনো অ্যাট্রিবিউট নির্বাচন করতে পারেন।কম ফ্লেক্সিবিলিটি, কারণ এটি মূল Partition Key এর উপর নির্ভরশীল।
ConsistencyStrongly consistent reads সাপোর্ট করে।Strongly consistent reads সাপোর্ট করে।

Conclusion

  • Global Secondary Index (GSI) ব্যবহার করা উচিত যখন আপনি এমন একটি ইন্ডেক্স চান যা আপনার টেবিলের Partition Key এবং Sort Key এর বাইরে অন্য কোনো অ্যাট্রিবিউটের মাধ্যমে দ্রুত ডেটা অনুসন্ধান করতে সক্ষম।
  • Local Secondary Index (LSI) ব্যবহার করা উচিত যখন আপনি একাধিক Sort Key এর সাহায্যে একই Partition Key এর মধ্যে বিভিন্ন ধরনের ডেটা অনুসন্ধান করতে চান। LSI মূল টেবিলের পারফরম্যান্সের সাথে সম্পর্কিত হওয়ায় এটি অতিরিক্ত কনফিগারেশনের প্রয়োজন হতে পারে।

এখন যদি তোমার আরও কোনো প্রশ্ন থাকে বা অন্য কোনো বিষয়ে জানতে চাও, আমি সাহায্য করতে প্রস্তুত!

common.content_added_by

Global Secondary Index (GSI) এবং Local Secondary Index (LSI) এর মধ্যে পার্থক্য

258
258

DynamoDB টেবিলের মধ্যে ডেটা কোয়েরি এবং পারফরম্যান্স অপটিমাইজ করতে Indexes ব্যবহার করা হয়। দুটি প্রধান ধরনের ইন্ডেক্স হল Global Secondary Index (GSI) এবং Local Secondary Index (LSI)। এই দুটি ইন্ডেক্সই ডেটা কুইরির কার্যকারিতা উন্নত করতে সাহায্য করে, কিন্তু তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে যা তাদের ব্যবহারের উপযুক্ততা নির্ধারণ করে।


1. Global Secondary Index (GSI)

GSI হল একটি ইন্ডেক্স যা মূল টেবিলের Primary Key (Partition Key এবং Sort Key) থেকে আলাদা নতুন Partition Key এবং Sort Key ব্যবহার করে। GSI ব্যবহার করার মাধ্যমে আপনি নতুন বা আলাদা কুয়েরি প্যাটার্ন তৈরি করতে পারেন যা প্রাথমিক টেবিলের পারফরম্যান্সে কোনও প্রভাব ফেলে না।

GSI এর বৈশিষ্ট্য:

  • Partition Key এবং Sort Key টেবিলের মূল কীগুলোর বাইরে কনফিগার করা যায়। আপনি যে কোনও আর্গুমেন্ট বা ফিল্ডকে Partition Key এবং Sort Key হিসেবে ব্যবহার করতে পারেন।
  • GSI কখনোই টেবিলের Primary Key এর উপর নির্ভর করে না। এটি স্বতন্ত্রভাবে পার্টিশন তৈরি করে।
  • অন-ডিমান্ড এবং আটো-স্কেলিং সক্ষম, তাই GSI সক্ষম করতে গেলে কোনও প্রি-কনফিগারড সাইজ বা লিমিট নির্ধারণ করতে হয় না।
  • GSI আপনার টেবিলের ডেটা ফিল্টার এবং স্ক্যান অপারেশনকে দ্রুততর করতে সাহায্য করে।
  • আপনি GSI দিয়ে Query অপারেশন করতে পারবেন, যা টেবিলের মূল Partition Key বা Sort Key ব্যবহার না করে।

GSI এর উদাহরণ:

ধরা যাক আপনার টেবিলের Partition Key হল UserID এবং Sort Key হল Timestamp। এখন আপনি যদি শুধুমাত্র Status বা অন্য কোনও অ্যাট্রিবিউটের ভিত্তিতে কোয়েরি করতে চান, তাহলে GSI তৈরি করতে পারেন যেখানে Partition Key হল Status এবং Sort Key Timestamp


2. Local Secondary Index (LSI)

LSI হল এমন একটি ইন্ডেক্স যা টেবিলের মূল Partition Key কে অপরিবর্তিত রেখে, নতুন Sort Key ব্যবহার করে তৈরি হয়। অর্থাৎ, LSI মূল টেবিলের Partition Key এর সাথে সম্পর্কিত কিন্তু Sort Key আলাদা করে কনফিগার করা হয়। এতে শুধুমাত্র একটি Partition Key এবং Sort Key থাকা ইন্ডেক্স তৈরি হয়।

LSI এর বৈশিষ্ট্য:

  • Partition Key অপরিবর্তিত থাকে, কিন্তু Sort Key পরিবর্তিত হয়।
  • LSI শুধুমাত্র Provisioned Capacity Mode তে কাজ করে, অর্থাৎ On-demand capacity mode তে LSI ব্যবহার করা যায় না।
  • LSI এর মাধ্যমে, আপনি টেবিলের সমস্ত ডেটা কপি রাখতে পারেন, কিন্তু তা শুধুমাত্র মূল Partition Key এর জন্যই হবে।
  • Consistency: LSI Strongly Consistent Reads সাপোর্ট করে, যা GSI এর তুলনায় ভাল কনসিসটেন্সি প্রদান করে।
  • LSI তে Query অপারেশন চালানোর সময় আপনি শুধুমাত্র একটি Partition Key দিয়ে একাধিক Sort Key-তে ফিল্টার করতে পারেন।

LSI এর উদাহরণ:

ধরা যাক আপনার টেবিলের Partition Key হল UserID এবং Sort Key হল Timestamp। আপনি যদি Status এর ভিত্তিতে কোয়েরি করতে চান, তবে LSI তৈরি করতে পারেন যেখানে Partition Key হল UserID এবং Sort Key হল Status (অথবা অন্য কোনও অ্যাট্রিবিউট, যা আপনাকে প্রয়োজন)।


Global Secondary Index (GSI) এবং Local Secondary Index (LSI) এর মধ্যে পার্থক্য

বৈশিষ্ট্যGSILSI
Partition KeyPartition Key আলাদা হতে পারেPartition Key অপরিবর্তিত থাকে
Sort KeySort Key আলাদা হতে পারেSort Key পরিবর্তিত হয় (Primary Key এর Sort Key)
Capacity ModeProvisioned এবং On-Demand উভয়ই সাপোর্ট করেশুধুমাত্র Provisioned Mode সাপোর্ট করে
ConsistencyEventually Consistent বা Strongly Consistent Read সাপোর্ট করেশুধুমাত্র Strongly Consistent Read সাপোর্ট করে
সীমাবদ্ধতাGSI ব্যবহার করার জন্য কোনও সীমাবদ্ধতা নেইপ্রতি টেবিলের জন্য সর্বাধিক 5টি LSI হতে পারে
Queryingনতুন Partition Key এবং Sort Key দিয়ে কোয়েরি করা যায়শুধুমাত্র একই Partition Key এর মধ্যে Sort Key পরিবর্তন করা যায়

কখন কোনটা ব্যবহার করবেন?

  • GSI ব্যবহার করুন যখন আপনার ডেটার জন্য নতুন Partition Key এবং Sort Key এর ভিত্তিতে দ্রুত কুয়েরি প্রয়োজন হয় এবং আপনার কুয়েরি প্যাটার্ন প্রাথমিক Partition Key অথবা Sort Key থেকে আলাদা হতে পারে।
  • LSI ব্যবহার করুন যখন আপনার ডেটার জন্য একই Partition Key তে বিভিন্ন Sort Key দিয়ে কুয়েরি করার প্রয়োজন হয় এবং যদি আপনি Strongly Consistent Reads চান।

এভাবে, GSI এবং LSI এর পার্থক্য এবং তাদের উপযোগিতা বুঝে আপনি আপনার অ্যাপ্লিকেশনের জন্য সঠিক ইন্ডেক্স ব্যবহার করতে পারবেন।

common.content_added_by

Index তৈরি এবং ম্যানেজমেন্ট

218
218

DynamoDB-তে Indexes একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটার অনুসন্ধান এবং কুয়েরি অপটিমাইজেশনে সাহায্য করে। DynamoDB দুটি প্রধান ধরনের ইনডেক্স সমর্থন করে:

  1. Primary Index (Partition Key এবং Sort Key)
  2. Secondary Indexes (Global Secondary Indexes এবং Local Secondary Indexes)

এখানে Index তৈরি এবং ম্যানেজমেন্ট সংক্রান্ত তথ্য বিস্তারিতভাবে দেওয়া হলো।


১. Secondary Indexes (GSI এবং LSI)

Secondary Indexes হল ইনডেক্স যা মূল টেবিলের বাইরে অন্য কোনো কনফিগারেশন দিয়ে ডেটা অনুসন্ধানের জন্য ব্যবহৃত হয়। সেগুলোর মাধ্যমে আপনি টেবিলের উপর বিভিন্ন কুয়েরি করতে পারবেন যা মূল Primary Key দিয়ে করা সম্ভব নয়।

(i) Global Secondary Index (GSI)

GSI আপনাকে টেবিলের কোন অ্যাট্রিবিউটের উপর কুয়েরি চালানোর সুবিধা দেয়, যা মূল টেবিলের Primary Key বা Sort Key নয়।

  • GSI এর Partition Key এবং Sort Key আলাদা হতে পারে যা টেবিলের মূল Partition Key বা Sort Key থেকে ভিন্ন হতে পারে।
  • GSI এর মাধ্যমে আপনি এমন কুয়েরি চালাতে পারবেন যা টেবিলের মূল কনফিগারেশন দিয়ে সম্ভব নয়।

GSI তৈরি করার প্রক্রিয়া:

  1. AWS Management Console-এ DynamoDB সার্ভিসে যান।
  2. আপনার টেবিল নির্বাচন করুন, তারপর Indexes ট্যাবে যান।
  3. Create Index বাটনে ক্লিক করুন।
  4. এখানে, Partition Key এবং Sort Key এর জন্য নতুন অ্যাট্রিবিউট নির্বাচন করুন যা আপনি GSI তৈরি করতে চান।
  5. আপনি চাইলে Projection কনফিগার করতে পারেন যা নির্দিষ্ট কিছু অ্যাট্রিবিউটকে কভার করবে (নির্দিষ্ট অ্যাট্রিবিউট অথবা পুরো টেবিল)।
  6. GSI তৈরি করার পর এটি স্বয়ংক্রিয়ভাবে টেবিলের সাথে যুক্ত হয়ে যাবে।

(ii) Local Secondary Index (LSI)

LSI একটি ইনডেক্স যা একই Partition Key ব্যবহার করে কিন্তু একটি ভিন্ন Sort Key এর উপর ভিত্তি করে কাজ করে। LSI তৈরি করার সময়, Partition Key একই থাকে তবে Sort Key পরিবর্তিত হয়।

  • LSI শুধুমাত্র টেবিল তৈরি করার সময় কনফিগার করা যায়, পরে আর পরিবর্তন করা যায় না।
  • এটি রিয়েল-টাইম কুয়েরি অপারেশনগুলোর জন্য উপযুক্ত।

LSI তৈরি করার প্রক্রিয়া:

  1. AWS Management Console-এ DynamoDB টেবিলের Create table অপশন নির্বাচন করুন।
  2. Partition Key এবং Sort Key কনফিগার করার পর, Add sort key for LSI অপশন ব্যবহার করে LSI কনফিগার করুন।
  3. LSI তৈরি করার সময়, Projection কনফিগার করুন। আপনি চাইলে কেবলমাত্র নির্দিষ্ট অ্যাট্রিবিউট নির্বাচন করতে পারেন।

২. Index ম্যানেজমেন্ট

DynamoDB-তে তৈরি করা ইনডেক্সগুলোর কার্যক্ষমতা ম্যানেজ করা খুবই গুরুত্বপূর্ণ। DynamoDB-তে Index ম্যানেজমেন্টে কয়েকটি গুরুত্বপূর্ণ বিষয় থাকে:

  1. Index Maintenance:
    • GSI এবং LSI প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে ম্যানেজ হয়, তবে প্রয়োজনে আপনি Indexes মুছতে বা আপডেট করতে পারেন।
    • Projection এবং Capacity Units (RCU/WCU) কনফিগারেশন ঠিক রাখা গুরুত্বপূর্ণ।
  2. Index মুছা:
    • আপনি যদি কোনো GSI বা LSI আর ব্যবহার করতে না চান, তবে সেটা সহজেই মুছে ফেলতে পারেন।
    • AWS Management Console-এ গিয়ে টেবিলের Indexes সেকশনে যান এবং প্রাসঙ্গিক ইনডেক্স মুছতে পারেন।
  3. Performance Monitoring:
    • DynamoDB টেবিলের Performance মেট্রিকস মনিটর করার জন্য CloudWatch ব্যবহার করতে পারেন।
    • ইনডেক্সগুলোর জন্য ব্যস্ততা, ব্যবহার এবং প্রতিক্রিয়া সময় মনিটর করুন যাতে আপনি প্রয়োজনীয় পরিবর্তন করতে পারেন।

৩. Indexes ব্যবহার করে Query Optimization

Indexes ব্যবহার করে আপনি Query Performance অনেক উন্নত করতে পারেন। এতে আপনি অনেক দ্রুত তথ্য বের করতে পারবেন, বিশেষ করে যদি ডেটার পরিমাণ অনেক বেশি হয়।

Query Optimization জন্য কিছু কৌশল:

  1. GSI ব্যবহার করুন: GSI ব্যবহার করার মাধ্যমে আপনি দ্রুত এবং আরো ফ্লেক্সিবল কুয়েরি অপারেশন করতে পারবেন।
  2. LSI ব্যবহার করুন: LSI এর মাধ্যমে আপনি একই Partition Key-তে ভিন্ন Sort Key এর উপর কুয়েরি করতে পারেন, যা কুয়েরি অপারেশনের পারফরম্যান্সে সুবিধা দেয়।
  3. Projection: কেবলমাত্র প্রাসঙ্গিক অ্যাট্রিবিউটগুলো প্রজেক্ট করুন যাতে অপারেশনের স্পিড বাড়ে এবং খরচ কমে।

উপসংহার

DynamoDB Indexes ব্যবহারে আপনি ডেটার উপর দ্রুত এবং আরও ফ্লেক্সিবল কুয়েরি চালাতে পারবেন। Global Secondary Index (GSI) এবং Local Secondary Index (LSI) দুটি গুরুত্বপূর্ণ ইনডেক্স পদ্ধতি, যা ডেটাবেসের পারফরম্যান্স এবং স্কেলেবিলিটি বাড়াতে সাহায্য করে। DynamoDB এর Indexing কৌশলগুলো ভালোভাবে বুঝে ব্যবহার করলে, আপনার অ্যাপ্লিকেশন অনেক দ্রুত এবং দক্ষ হয়ে উঠবে।

common.content_added_by

Index ব্যবহার করে Query Optimization

209
209

DynamoDB তে Query অপারেশন দ্রুত এবং কার্যকরীভাবে সম্পাদন করার জন্য Indexes ব্যবহার করা যেতে পারে। ইন্ডেক্সেস, ডেটার দ্রুত অনুসন্ধান এবং কুয়েরি অপটিমাইজেশন করতে সাহায্য করে। DynamoDB তে দুটি প্রধান ধরনের ইনডেক্স রয়েছে:

  1. Global Secondary Index (GSI)
  2. Local Secondary Index (LSI)

এই ইন্ডেক্সগুলি ব্যবহার করে আপনি কুয়েরির পারফরম্যান্স বৃদ্ধি করতে এবং ডেটা দ্রুত সেগমেন্ট করতে পারেন।


Index ব্যবহার করে Query Optimization - প্রধান ধারণা:

১. Global Secondary Index (GSI):

  • GSI এর মাধ্যমে আপনি টেবিলের প্রাথমিক চাবি (Partition key এবং Sort key) ছাড়াও অন্য যেকোনো অ্যাট্রিবিউটের উপর কুয়েরি চালাতে পারবেন।
  • এটি একটি অপশনাল ইনডেক্স এবং আপনি একাধিক GSI তৈরি করতে পারবেন।

গুণাবলী:

  • GSI এ আপনি বিভিন্ন Partition key এবং Sort key কনফিগার করতে পারেন, যা কুয়েরির দক্ষতা বাড়ায়।
  • GSI এর ডেটা প্রাথমিক টেবিলের সাথে প্রোপ্যাগেটেড হয়, তাই কুয়েরির ক্ষেত্রে দ্রুত ফলাফল পাওয়া যায়।

উদাহরণ: ধরুন আপনি একটি Products টেবিলের ডেটাবেসে কাজ করছেন এবং প্রাথমিক চাবি হিসেবে ProductID ব্যবহার করছেন। তবে, আপনি যদি Category অ্যাট্রিবিউটের উপর কুয়েরি করতে চান, তাহলে একটি GSI তৈরি করতে পারেন যেখানে Partition key হবে Category এবং Sort key হবে Price.

GSI নাম: CategoryIndex
Partition key: Category
Sort key: Price

GSI দিয়ে কুয়েরি করার উদাহরণ:

aws dynamodb query \
--table-name Products \
--index-name CategoryIndex \
--key-condition-expression "Category = :category" \
--expression-attribute-values '{":category":{"S":"Electronics"}}'

এই কুয়েরি দ্বারা আপনি Electronics ক্যাটেগরির সমস্ত পণ্য পাওয়ার জন্য দ্রুত ফলাফল পাবেন।

২. Local Secondary Index (LSI):

  • LSI ব্যবহার করে আপনি টেবিলের Primary key এর ওপর ভিত্তি করে অতিরিক্ত Sort key ব্যবহার করতে পারবেন।
  • LSI এর জন্য, আপনি একটি Partition key শেয়ার করেন যা মূল টেবিলের সাথে সামঞ্জস্যপূর্ণ, তবে Sort key আলাদা হতে পারে। এটি আপনার Query অপটিমাইজেশনে সাহায্য করে যখন আপনি নির্দিষ্ট অ্যাট্রিবিউটের ওপর ফিল্টার করতে চান।

গুণাবলী:

  • LSI শুধুমাত্র Provisioned থ্রুপুট ব্যবহারের সময় তৈরি করা যায় এবং এতে Read capacity units (RCU) এবং Write capacity units (WCU) এর ওপর কিছু বিধিনিষেধ থাকে।
  • LSI এর উপকারিতা হল যে এটি ডেটার অর্ডার পরিবর্তন করতে সাহায্য করে এবং দ্রুত ফলাফল প্রদান করে।

উদাহরণ: ধরুন আপনার Orders টেবিলের OrderID এবং CustomerID রয়েছে, এবং আপনি OrderDate অ্যাট্রিবিউটের উপর কুয়েরি করতে চান। এখানে, একটি LSI ব্যবহার করা হতে পারে।

LSI নাম: OrderDateIndex
Partition key: CustomerID
Sort key: OrderDate

LSI দিয়ে কুয়েরি করার উদাহরণ:

aws dynamodb query \
--table-name Orders \
--index-name OrderDateIndex \
--key-condition-expression "CustomerID = :customerId and OrderDate between :startDate and :endDate" \
--expression-attribute-values '{":customerId":{"S":"12345"}, ":startDate":{"S":"2023-01-01"}, ":endDate":{"S":"2023-12-31"}}'

এই কুয়েরি CustomerID 12345 এর সকল অর্ডার 2023-01-01 থেকে 2023-12-31 এর মধ্যে ফেরত দেবে।


Query Optimization এর জন্য কিছু কৌশল:

  1. ইন্ডেক্স সিলেকশন:
    • যখনই নতুন কুয়েরি তৈরি করবেন, ভালোভাবে ভাবুন কোন ইন্ডেক্স আপনাকে সহায়তা করবে। আপনি যদি একটি Category বা City অ্যাট্রিবিউটের ওপর কুয়েরি করছেন, তবে GSI ব্যবহার করা উত্তম। যদি আপনার কুয়েরি মূল Partition key এর সাথে সম্পর্কিত হয়, তবে LSI কার্যকরী হতে পারে।
  2. Projection Expression ব্যবহার করুন:
    • শুধুমাত্র সেই ফিল্ডগুলো নির্বাচন করুন যা প্রয়োজন। এতে সময় বাঁচবে এবং ডেটার আউটপুট কম হবে, ফলে কুয়েরি দ্রুত হবে। উদাহরণ:

      aws dynamodb query \
      --table-name Products \
      --index-name CategoryIndex \
      --projection-expression "ProductID, Name, Price" \
      --key-condition-expression "Category = :category" \
      --expression-attribute-values '{":category":{"S":"Electronics"}}'
      
  3. Filter Expression ব্যবহার করা:
    • Key condition expression ব্যবহার করার পাশাপাশি, Filter expression ব্যবহার করে ডেটা পরিশোধন করতে পারেন, তবে মনে রাখবেন যে এটি কুয়েরি অপটিমাইজেশন এর জন্য কম কার্যকরী হতে পারে কারণ পুরো ডেটা স্ক্যান করতে হবে।
  4. Pagination প্রয়োগ করুন:
    • যদি আপনার কুয়েরি খুব বড় হয়, তাহলে পেজিনেশন প্রয়োগ করুন যাতে আপনি ডেটার একটি নির্দিষ্ট অংশ একসাথে প্রক্রিয়া করতে পারেন।
    • Pagination এর মাধ্যমে কুয়েরি রেজাল্টের পরিমাণ কমিয়ে এনে পারফরম্যান্স বৃদ্ধি করা যায়।

উপসংহার

Indexes ব্যবহার করে DynamoDB তে কুয়েরি অপটিমাইজেশন আপনার অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে পারে। আপনি GSI বা LSI ব্যবহার করে ডেটার দ্রুত অনুসন্ধান করতে পারেন এবং আপনার কুয়েরির জন্য সবচেয়ে কার্যকরী ইনডেক্স নির্বাচন করতে পারবেন। সঠিকভাবে ইনডেক্স কনফিগার করলে, আপনার অ্যাপ্লিকেশন আরও দ্রুত এবং স্কেলেবল হবে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion